// 给你一个二进制字符串 binary ，它仅有 0 或者 1 组成。你可以使用下面的操作任意次对它进行修改：
//     操作 1 ：如果二进制串包含子字符串 "00" ，你可以用 "10" 将其替换。
//         比方说， "00010" -> "10010"
//     操作 2 ：如果二进制串包含子字符串 "10" ，你可以用 "01" 将其替换。
//         比方说， "00010" -> "00001"
// 请你返回执行上述操作任意次以后能得到的 最大二进制字符串 。
// 如果二进制字符串 x 对应的十进制数字大于二进制字符串 y 对应的十进制数字，
// 那么我们称二进制字符串 x 大于二进制字符串 y 。

// 示例 1：
// 输入：binary = "000110"
// 输出："111011"
// 解释：一个可行的转换为：
// "000110" -> "000101" 
// "000101" -> "100101" 
// "100101" -> "110101" 
// "110101" -> "110011" 
// "110011" -> "111011"

// 示例 2：
// 输入：binary = "01"
// 输出："01"
// 解释："01" 没办法进行任何转换。

// 提示：
//     1 <= binary.length <= 105
//     binary 仅包含 '0' 和 '1' 。

/**
 * @param {string} binary
 * @return {string}
 */
var maximumBinaryString = function(binary) {
    ////要得到最大值，就需要尽可能的变换00-->10,
    ///如果两个0相邻，则直接把第一个0置为1
    ///如果两个0不相邻，则需要不断的把后面的0往前挪
    //////////---fuck超时。
    /////////////看了其他答案，技巧性太重，还是我这个比较正统，不过数据量太大的时候就会超时
    let array = binary.split('');
    let zeroPos = [];
    for(let i = 0; i < array.length; i++) {
        array[i] === '0' && zeroPos.push(i);
    }
    ///只有1个0的话不需要变换
    while(zeroPos.length > 1) {
        let zero1 = zeroPos[0];
        zeroPos.shift();
        let zero2 = zeroPos[0];
        if (zero1 === zero2 - 1) { ///相邻
            array[zero1] = '1';
        } else {
            zeroPos.shift();
            array[zero1] = '1';
            array[zero1 + 1] = '0';
            array[zero2] = '1';
            zeroPos.unshift(zero1 + 1);///这里要放入新的0的位置
        }
    }
    return array.join('');
};

console.log(maximumBinaryString("000110"));


